import axios from "axios"; //导入axios
import { Message } from "element-ui"; //使用element-ui Message做消息提醒

//1.创建axios实例
const service = axios.create({
	baseURL: process.env.VUE_APP_BASE_API, //axios中请求配置有baseURL选项，表示请求URL公共部分
	timeout: 300000, //请求时间
	responseType: "json", //json格式
	withCredentials: true, //跨域请求是否要携带cookie
	headers: {
		//请求头
		"Content-Type": "application-json/x-www-form-urlencoded;charset=UTF-8",
	},
});

//2.请求拦截器
service.interceptors.request.use(
	(config) => {
		//发送请求前做的一些处理，数据转化，配置请求头，设置token，设置loading等
		config.data = JSON.stringify(config.data);
		//使用token的时候需要引入cookie方法或者用本地LocalStorage等方法
		if (localStorage.getItem("token") == null) {
			//window.location.href = '/login'
		} else {
			config.headers["token"] = localStorage.getItem("token");
		}
		return config;
	},
	(error) => {
		Message.error("请求失败!!!");
		//返回axios.catch错误信息
		return Promise.reject(error);
	}
);

//3.响应拦截器
service.interceptors.response.use(
	(response) => {
		//接收到响应数据并成功后的一些共有的处理，关闭loading等})
		if (response.data.code !== 200) {
			Message({
				message: res.message || "Error",
				type: "error",
				duration: 5 * 1000,
			});
		} else {
			return res;
		}
	},
	(error) => {
		if (error && error.response) {
			switch (error.response.status) {
				case 400:
					error.Message = "错误请求";
					break;
				case 401:
					error.Message = "未授权，请重新登录";
					break;
				case 403:
					error.Message = "拒绝访问";
					break;
				case 404:
					error.Message = "请求错误，未找到该资源";
					window.location.href = "/NotFound";
					break;
				case 405:
					error.Message = "请求方法不允许";
					break;
				case 408:
					error.Message = "请求超时";
					break;
				case 500:
					error.Message = "服务端出现错误";
					break;
				case 501:
					error.message = "网络未实现";
					break;
				case 502:
					error.message = "网络错误";
					break;
				case 503:
					error.message = "服务不可用";
					break;
				case 504:
					error.message = "网络超时";
					break;
				case 505:
					error.message = "http版本不支持该请求";
					break;
				default:
					error.message = `连接错误${error.response.status}`;
			}
		} else {
			//超时处理
			if (JSON.stringify(error).includes("timeout")) {
				Message.error("服务器响应超时，请刷新当前页");
			}
			error.message = "连接服务器失败";
		}
		// 接收异常响应处理
		Message.error("响应失败！！！", error.message);
		return Promise.resolve(error.response);
	}
);

export default service; //4.导出文件
